/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Config;

import java.io.FileOutputStream;
import java.net.URL;
import java.util.Properties;
import java.util.Set;
import org.newdawn.slick.util.ResourceLoader;

/**
 * Esta clase carga en memoria los archivos de configuracion (.cfg),
 * que posteriormente se utilizaran durante el programa
 * 
 * @author Raul Delgado Astudillo y Xavier Pol Sevilla
 */
public class ArchivoConfiguracion {

    // Objeto properties
    private Properties propiedades;
    // url del fichero cfg
    private String archivo;

    /**
     * Abre el archivo de configuracion que se encuentra en la url pasada
     * @param url del archivo
     */
    public ArchivoConfiguracion(String urlArchivo) {
        boolean cond = false;
        while (!cond) {
            try {
                propiedades = new Properties();
                URL url = ResourceLoader.getResource(urlArchivo);
                archivo = url.toURI().getPath();
                propiedades.load(url.openStream());
                cond = true;

            } catch (Exception e) {
                System.err.println(e.getMessage());
            }
        }
    }

    /**
     * Guardo los datos que se encuentran en el objeto propiedades en el archivo de configuracion
     */
    public void guardar() {
        try {
            propiedades.store(new FileOutputStream(archivo), "Configuracio");
        } catch (Exception e) {
            throw new RuntimeException("No s'ha pogut guardar el fitxer: " + archivo);
        }
    }

    // Getters i setters

    public String getPropiedadString(String key) {
        return propiedades.getProperty(key);
    }

    public Boolean getPropiedadBoolean(String key) {
        return Boolean.parseBoolean(propiedades.getProperty(key));
    }

    public int getPropiedadInt(String key) {
        return Integer.parseInt(propiedades.getProperty(key));
    }

    public float getPropiedadFloat(String key) {
        Float f=null;
        String propietat=propiedades.getProperty(key);
        if(propietat.contains("-")){
            String[] linia=propietat.split("-");
            f=Float.parseFloat(linia[1]);
            f*=-1;
        }
        else{
            f=Float.parseFloat(propietat);
        }
        return f;
    }

    public double getPropiedadDouble(String clau) {
        return Double.parseDouble(propiedades.getProperty(clau));
    }

    public Set<Object> getTodasPropiedades() {
        return propiedades.keySet();
    }

    public String getStringArchivo() {
        return archivo;
    }

    public void setPropiedadString(String key, String valor) {
        propiedades.setProperty(key, valor);
    }

    public void setPropiedadBoolean(String key, Boolean valor) {
        propiedades.setProperty(key, String.valueOf(valor));
    }

    public void setPropiedadInt(String key, int valor) {
        propiedades.setProperty(key, String.valueOf(valor));
    }

    public void setPropiedadFloat(String key, float valor) {
        propiedades.setProperty(key, String.valueOf(valor));
    }

    public long getPropiedadLong(String key) {
        return Long.parseLong(propiedades.getProperty(key));
    }

    public void setPropiedadLong(String key, long valor) {
        propiedades.setProperty(key, String.valueOf(valor));
    }

    public void setPropiedadDouble(String clau, double valor) {
        propiedades.setProperty(clau, String.valueOf(valor));
    }
}

